The present invention relates to determining modified portions of a RAID storage array, and more particularly to determining modified portions of a RAID storage array for use in resynchronizing the RAID storage array after a failure.
RAID storage arrays operate using parity to enable detection and possible correction of errors in data stored in the RAID storage array. There is an overhead of extra input/output (I/O) to read and write the parity in addition to reading and writing the data with which the parity is associated. Prior art RAID storage arrays reduce this overhead using “atomic parity update” in which an I/O is returned as complete before the I/O to the disk in the RAID storage array storing parity for that I/O is complete, or even issued. A record needs to be kept of parity updates that are “owing” or not completed. Typically this is in a metadata journal.
Prior art parity coalescing allows multiple, often sequentially addressed, updates to data stored within a single stride in the RAID storage array to have the effect on parity of each of the multiple updates combined and applied in one write. Again, a record needs to be kept of parity updates that are “owing” or not completed. Again, typically this is in a metadata journal.
When a drive is first plugged into a prior art RAID system, it typically has random bits stored until an initial matching data and parity pattern has been written to the drive. Until this initialization has been done, a record needs to be kept of locations on drives that do not yet have parity initialized because parity based RAID recovery techniques cannot be used for these locations.
When a prior art drive holding parity is determined by the RAID storage array as being “sick” or “slow”, it may temporarily be given a “rest” from I/O and treated similar to that of a failed drive by the sending of test I/Os, “test unit ready” SCSI commands and allowing it to perform a reset. During this “rest” period, the drive is known as a “component-in-doubt”. Reads of data may be handled using parity assisted “preemptive reconstruct” and writes may be handled by writing to all of the other stripes in the stride and “recovering” the omitted strip when the drive is no longer a “component-in-doubt”. Until this recovery is complete, the RAID storage array must maintain metadata (typically in a metadata journal) in a bitmap for all of the I/Os that need this “component-in-doubt” recovery operation. For a gathered write volume, the time that writes are initiated may be tracked and thus writes made during the “component-in-doubt” period may be determined.
In the situations described above, the data and associated parity in a RAID storage array do not correspond. The record of locations that have parity updates not completed or not initialized allows the parity to be subsequently updated using the associated data. If there is a drive failure, in a normal “parity rebuild” operation, the RAID storage array reads the parity and data stored on the remaining drives and calculates what the data stored on the failed. However, this can take a long time for large RAID storage arrays as the data and parity on each drive in the RAID storage array must be read and written. Further, this “parity rebuild” operation is likely to be carried out at a critical time when a failed system has come back online and is likely to have a backlog of other tasks to perform. This means that any savings that can be made in the “parity rebuild” operation are valuable.